package com.smashligaprojectm;

import java.sql.SQLException;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.DaoManager;
import com.j256.ormlite.jdbc.JdbcConnectionSource;
import com.j256.ormlite.support.ConnectionSource;

public class LigaSmash {
	public static Dao<Jugador,String> jugadorDao;
	public static Dao<Personaje,String> personajeDao;
	public static Dao<Tier,String> tierDao;
	public static Dao<LigaInt,String> ligaIntDao;
	
	public static void registrarCombate(Jugador a, Jugador b, Personaje c1, Personaje c2, int stocksA, int stocksB){
		try {
			int puntVentaja = 150;
			int kPjs= 200;
			int ajustePjs = 300;
			int kA = a.getTier().getKvalor();
			int kB = b.getTier().getKvalor();
			int sPA = (int) Math.signum(stocksA);
			int sPB = (int) Math.signum(stocksB);
			
			/* Liga del jugador a */
			LigaInt unoU = ligaIntDao.queryForMatching(new LigaInt(a,c1,'U')).get(0);
			LigaInt unoE = ligaIntDao.queryForMatching(new LigaInt(a,c2,'E')).get(0);
			double eUnoU = operacion(1,unoE.getPunt(),unoU.getPunt(),ajustePjs);
			double eUnoE = operacion(1,unoU.getPunt(),unoE.getPunt(),ajustePjs);
			unoU.setPunt((int) (unoU.getPunt()+kPjs*(sPA-eUnoU)));
			unoE.setPunt((int) (unoE.getPunt()+kPjs*(sPB-eUnoE)));
			ligaIntDao.update(unoU);
			ligaIntDao.update(unoE);
			/* Fin liga del jugador a */
			
			/* Liga del jugador b */
			LigaInt dosU = ligaIntDao.queryForMatching(new LigaInt(b,c2,'U')).get(0);
			LigaInt dosE = ligaIntDao.queryForMatching(new LigaInt(b,c1,'E')).get(0);
			double eDosU = operacion(1,dosE.getPunt(),dosU.getPunt(),ajustePjs);
			double eDosE = operacion(1,dosU.getPunt(),dosE.getPunt(),ajustePjs);
			dosU.setPunt((int) (dosU.getPunt()+kPjs*(sPB-eDosU)));
			dosE.setPunt((int) (dosE.getPunt()+kPjs*(sPA-eDosE)));
			ligaIntDao.update(dosU);
			ligaIntDao.update(dosE);
			/* Fin liga del jugador b */
			
			double eA = operacion(4,b.getPunt(),a.getPunt(),puntVentaja);
			double eB = operacion(4,a.getPunt(),b.getPunt(),puntVentaja);
			a.setPunt((int) (a.getPunt()+kA*(stocksA-eA)*(sPA-eUnoU)));
			b.setPunt((int) (b.getPunt()+kB*(stocksB-eB)*(sPB-eDosU)));
			jugadorDao.update(a);
			jugadorDao.update(b);

			System.out.println(ligaIntDao.queryForAll());
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static double operacion(int arriba,int datoB, int datoA, int ajuste){
		return (arriba)/(1+Math.pow(10, (datoB-datoA)/ajuste));
	}
	public static void main(String[] args) {
	    try {
	      ConnectionSource cs = new JdbcConnectionSource("jdbc:sqlite:LigaSmash.db");
	      jugadorDao = DaoManager.createDao(cs, Jugador.class);
	      personajeDao = DaoManager.createDao(cs, Personaje.class);
	      tierDao = DaoManager.createDao(cs, Tier.class);
	      
	      ligaIntDao = DaoManager.createDao(cs, LigaInt.class);
	      registrarCombate(jugadorDao.queryForId("Temp"),jugadorDao.queryForId("Joshua"),personajeDao.queryForId("Mario"),personajeDao.queryForId("Luigi"),0,4);
	      System.out.println("asdf = "+jugadorDao.queryForAll());
	    } catch ( Exception e ) {
	      System.err.println( e.getClass().getName() + ": " + e.getMessage() );
	      System.exit(0);
	    }
	}
}
